#pragma once
#include <QObject>
#include "pipeline_data.h"


class Pipeline
{
public:
	/****************************************************************************
	 * 功能: 业务线初始化接口
	 * 传参: id: 业务线编号
	 ****************************************************************************/
	virtual bool PipelineInit(const QString& id) = 0;

	/****************************************************************************
	 * 功能: 匹配任务数据，校验任务数据是否和业务线相匹配，如果匹配会将业务线状态切换为
	 *		任务等待状态
	 * 传参: task: 任务数据参数
	 * 返回值: 0: 表示匹配成功，可以执行，1：匹配成功，但是业务线存在执行中的任务，
	 *			-1：表示匹配失败。
	 ****************************************************************************/
	virtual int IfTaskAvailable(const QByteArray& task) = 0;

	/****************************************************************************
	 * 功能: 执行任务准备操作，在任务等待状态时被调用。用于执行任务初始化操作
	 * 返回值: true：执行成功，业务线切换到任务初始化完成状态
	 ****************************************************************************/
	virtual bool TaskInit() = 0;

	/****************************************************************************
	 * 功能: 判断任务启动条件是否具备
	 * 返回值:true：任务可以启动，业务线切换到任务开始状态
	 ****************************************************************************/
	virtual bool IfTaskStarted() = 0;

	/****************************************************************************
	 * 功能: 判断任务是否准备完成
	 * 返回值: true: 任务已经准备完成，直接进入任务等待状态
	 ****************************************************************************/
	virtual bool IfTaskPrepared() = 0;

	/****************************************************************************
	 * 功能: 用于生成新节拍
	 * 返回值: 0：节拍生成成功，业务线切换到节拍准备完成状态，1：生成条件不足， -1：生成失败
	 ****************************************************************************/
	virtual int StepPrepare() = 0;

	/****************************************************************************
	 * 功能: 判断节拍启动条件是否具备
	 * 返回值:true：节拍可以启动
	 ****************************************************************************/
	virtual bool IfStepStarted() = 0;

	/****************************************************************************
	 * 功能: 判断节拍路径是否全部完成，由节拍调用线程调用
	 * 返回值:true：节拍路径全部完成
	 ****************************************************************************/
	virtual bool IfStepPathEmpty() = 0;

	/****************************************************************************
	 * 功能: 判断节拍路径下发完成处理函数
	 * 返回值:true：节拍路径全部完成
	 ****************************************************************************/
	virtual bool StepExecuteFinish() = 0;

	/****************************************************************************
	 * 功能:	获取当前节拍下一条可执行路径， 由节拍调用线程调用
	 * 返回值: true:获取成功
	 ****************************************************************************/
	virtual bool GetNextExecPath(QString& path) = 0;

	/****************************************************************************
	 * 功能: 判断任务是否完成，任务完成等待状态被调用
	 * 返回值: true: 表示任务完成
	 ****************************************************************************/
	virtual bool IfTaskFinished() = 0;

	/****************************************************************************
	 * 功能: 任务完成处理操作， 任务完成状态时被调用
	 * 返回值: true 表示成功
	 ****************************************************************************/
	virtual bool TaskFinish() = 0;

	/****************************************************************************
	 * 功能: 任务状态获取/设置接口
	 ****************************************************************************/
	virtual PipelineTaskState GetPipelineTaskState() = 0;
	virtual bool SetPipelineTaskState(PipelineTaskState state) = 0;

	/****************************************************************************
	 * 功能: 路径启动前处理接口、路径结束后处理接口, 路径动作执行接口
	 * 传参: path: 路径名称， type: 路径动作类型 pram:路径动作参数
	 * 返回值: true：表示成功
	 ****************************************************************************/
	virtual bool PathStart(const QString& path) = 0;
	virtual bool PathFinished(const QString& path) = 0;
	virtual bool PathAction(int type, const QString& param) = 0;

	/*业务线名称获取*/
	virtual QString GetPipelineId() = 0;
	virtual PipelineInfo GetPipelinenfo() = 0;

	/*业务线错误信息获取*/
	virtual QString GetErrorMsg() = 0;
	virtual bool IsError() = 0;
	virtual void ClearErrorState() = 0;

	/*业务线任务信息获取*/
	virtual PipelineTaskInfo GetPipelineTaskInfo() = 0;

	/*任务信息处理接口*/
	virtual bool DeleteTaskInfo() = 0;
	virtual bool ChangTaskFinishNum(int num) = 0;
	virtual bool TaskContinue() = 0;
	virtual bool ManualTaskFinish() = 0;
};
